package com.yic.module.mes.service.itemproduceroute;

import java.util.*;
import javax.validation.*;
import com.yic.module.mes.controller.admin.itemproduceroute.vo.*;
import com.yic.module.mes.dal.dataobject.itemproduceroute.ItemProduceRouteDO;
import com.yic.framework.common.pojo.PageResult;

/**
 * 产品工艺路线 Service 接口
 *
 * @author 系统管理员
 */
public interface ItemProduceRouteService {


    /**
     * 配置产品工艺路线
     *
     * @param createReqVOs 创建信息
     * @return 编号
     */
    void createItemProduceRoute(@Valid List<ItemProduceRouteCreateReqVO> createReqVOs, Long itemProduceId);


    /**
     * 创建产品工艺路线
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createItemProduceRoute(@Valid ItemProduceRouteCreateReqVO createReqVO);

    /**
     * 更新产品工艺路线
     *
     * @param updateReqVO 更新信息
     */
    void updateItemProduceRoute(@Valid ItemProduceRouteUpdateReqVO updateReqVO);

    /**
     * 删除产品工艺路线
     *
     * @param id 编号
     */
    void deleteItemProduceRoute(Long id);

    /**
     * 获得产品工艺路线
     *
     * @param id 编号
     * @return 产品工艺路线
     */
    ItemProduceRouteDO getItemProduceRoute(Long id);

    /**
     * 获得产品工艺路线列表
     *
     * @param ids 编号
     * @return 产品工艺路线列表
     */
    List<ItemProduceRouteDO> getItemProduceRouteList(Collection<Long> ids);

    /**
     * 获得产品工艺路线分页
     *
     * @param pageReqVO 分页查询
     * @return 产品工艺路线分页
     */
    PageResult<ItemProduceRouteDO> getItemProduceRoutePage(ItemProduceRoutePageReqVO pageReqVO);

    /**
     * 获得产品工艺路线列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 产品工艺路线列表
     */
    List<ItemProduceRouteDO> getItemProduceRouteList(ItemProduceRouteExportReqVO exportReqVO);

    /**
     * 查询产品所有的工艺路线
     * @param id
     * @return
     */
    List<ItemProduceRouteRespVO> getListByItemProduceId(Long itemProduceId);

    /**
     * 通过产品生产信息ID查询
     * @param ids
     * @return
     */
    List<ItemProduceRouteDO> getItemProduceRouteListByItemProduceId(Collection<Long> ids);

    /**
     * 校验路线是否被产品使用
     * @param routeId
     * @return
     */
    boolean checkUseRoute(Long routeId);

    /**
     * 删除产品工艺路线
     * @param itemProduceId
     * @return
     */
    int deleteItemProduceRouteByItemId(Long itemProduceId);
}
